package com.yuw.control;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yuw.bean.UserInfoBean;
import com.yuw.service.IUserInfoService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
public class UserInfoRESTFulControl {

    @Resource
    private IUserInfoService userInfoService;

    /**
     * 保存和修改用于信息
     *
     * @param userInfoBean 用户参数实体类
     * @return 结果视图
     */
    @RequestMapping("/saveOrUpdateUserinfoWithOutFileRest")
    public ResponseEntity<String> saveOrUpdateUserInfoWithOutFile(UserInfoBean userInfoBean) {

        // 调用Service层进行用户信息数据保存和修改操作
        int i = userInfoService.saveOrUpdateUserInfo(userInfoBean);
        // 根据操作结果进行视图转发处理
        return new ResponseEntity<String>("ok", HttpStatus.OK);
    }

    /**
     * 使用ajax进行删除操作
     *
     * @param userid 删除记录的主键id字段值
     * @return 删除操作的结果记录
     */
    @RequestMapping("/doAjaxUserInfoDeleteByIDRest")
    public ResponseEntity<Map<String,Object>> doAjaxQueryByPramas(Integer userid) {
        // 调用service层进行删除操作
        int i = userInfoService.deleteUserInfoByID(userid);
        // 返回响应信息
        Map<String,Object> map = new HashMap<>();
        map.put("msg","删除成功!");
        return new ResponseEntity<Map<String,Object>>(map, HttpStatus.OK);
    }

    /**
     * ajax进行数据查询处理
     *
     * @param userInfoBean 查询参数信息
     * @return 查询结果集
     */
    @RequestMapping("/doAjaxUserInfoQueryByPramasRest")
    public ResponseEntity<List<UserInfoBean>> doAjaxQueryByPramas(UserInfoBean userInfoBean) {

        // 调用service层经进行数据库查询操作
        List<UserInfoBean> lstUserInfos = userInfoService.selectUserInfoByParams(userInfoBean);
        // 在springmvc中直接放回数据结构，springmvc会自动把数据结果集转换为 json数据串发给客户端
        // 如果不是springmvc框架，则需要使用手动或者第三方工具将结果集转换为json字符串发回给客户端
        return new ResponseEntity<List<UserInfoBean>>(lstUserInfos,HttpStatus.OK);
    }

    /**
     * ajax进行数据查询处理
     *
     * @param pageNum      分页查询当前页码
     * @param pageSize     分页查询的每页的记录数
     * @param userInfoBean 查询参数信息
     * @return 查询结果集
     */
    @RequestMapping("/doAjaxUserInfoQueryByPramasRestWithPageHelper")
    public ResponseEntity<PageInfo<UserInfoBean>> doAjaxQueryByPramasWithPageHelper(Integer pageNum, Integer pageSize, UserInfoBean userInfoBean) {

        // 在当前线程启动分页操作
        PageHelper.startPage(pageNum, pageSize," userid desc "); // 排序字段 不需要加 order by
        // 紧跟着的第一个select方法会被分页
        // 调用service层经进行数据库查询操作
        List<UserInfoBean> lstUserInfos = userInfoService.selectUserInfoByParams(userInfoBean);
        // 在springmvc中直接放回数据结构，springmvc会自动把数据结果集转换为 json数据串发给客户端
        // 如果不是springmvc框架，则需要使用手动或者第三方工具将结果集转换为json字符串发回给客户端
        PageInfo<UserInfoBean> pageInfo = new PageInfo<>(lstUserInfos);
        System.out.println("pagehelper...................");
        System.out.println("total:"+pageInfo.getTotal());
        System.out.println("size:"+pageInfo.getSize());
        System.out.println("list:"+pageInfo.getList());
        System.out.println("pageinfo:"+pageInfo);
        System.out.println("pagehelper...................");
        return new ResponseEntity<PageInfo<UserInfoBean>>(pageInfo,HttpStatus.OK);
    }
}
